home *** CD-ROM | disk | FTP | other *** search
/ Programming Windows 95 / Programming Windows 95.iso / code / CHAP12 / STATBAR.C < prev    next >
C/C++ Source or Header  |  1995-12-31  |  6KB  |  186 lines

  1. /*-------------------------------------------
  2.    STATBAR.C -- Status bar helper functions.
  3.                 (c) Paul Yao, 1996
  4.   -------------------------------------------*/
  5. #include <windows.h>
  6. #include <commctrl.h>
  7. #include "comcthlp.h"
  8. #include "gadgets.h"
  9.  
  10. typedef struct tagPOPUPSTRING
  11.      {
  12.      HMENU hMenu ;
  13.      UINT uiString ;
  14.      } POPUPSTRING ;
  15.  
  16. #define MAX_MENUS 5
  17.  
  18. static POPUPSTRING popstr[MAX_MENUS] ;
  19.  
  20. DWORD dwStatusBarStyles = WS_CHILD | WS_VISIBLE | 
  21.                           WS_CLIPSIBLINGS | CCS_BOTTOM |
  22.                           SBARS_SIZEGRIP ;
  23. extern HINSTANCE hInst ;
  24. extern HWND hwndStatusBar ;
  25.  
  26. //-------------------------------------------------------------------
  27. HWND InitStatusBar (HWND hwndParent)
  28.      {
  29.      HWND hwndSB ;
  30.  
  31.      // Initialize values for WM_MENUSELECT message handling
  32.      HMENU hMenu = GetMenu (hwndParent) ;
  33.      HMENU hMenuTB = GetSubMenu (hMenu, 2) ;
  34.      HMENU hMenuSB = GetSubMenu (hMenu, 3) ;
  35.      popstr[0].hMenu    = 0 ;
  36.      popstr[0].uiString = 0 ;
  37.      popstr[1].hMenu    = hMenu ;
  38.      popstr[1].uiString = IDS_MAIN_MENU ;
  39.      popstr[2].hMenu    = hMenuTB ;
  40.      popstr[2].uiString = IDS_TOOLBAR_MENU ;
  41.      popstr[3].hMenu    = hMenuSB ;
  42.      popstr[3].uiString = IDS_STATUSBAR_MENU ;
  43.      popstr[4].hMenu    = 0 ;
  44.      popstr[4].uiString = 0 ;
  45.  
  46.      hwndSB = CreateStatusWindow (dwStatusBarStyles,
  47.                                   "Ready",
  48.                                   hwndParent,
  49.                                   2) ;
  50.      return hwndSB ;
  51.      }
  52.  
  53. //-------------------------------------------------------------------
  54. void static FlipStyleFlag (LPDWORD dwStyle, DWORD flag)
  55.      {
  56.      if (*dwStyle & flag)  // Flag on -- turn off
  57.           {
  58.           *dwStyle &= (~flag) ;
  59.           }
  60.      else                  // Flag off -- turn on
  61.           {
  62.           *dwStyle |= flag ;
  63.           }
  64.      }
  65. //-------------------------------------------------------------------
  66. HWND RebuildStatusBar (HWND hwndParent, WORD wFlag)
  67.      {
  68.      HWND hwndSB ;
  69.      RECT r ;
  70.  
  71.      switch (wFlag)
  72.           {
  73.           case IDM_STAT_SIZEGRIP :
  74.                FlipStyleFlag (&dwStatusBarStyles, SBARS_SIZEGRIP) ;
  75.                break ;
  76.  
  77.           case IDM_STAT_TOP :
  78.                dwStatusBarStyles &= 0xFFFFFFFC ;
  79.                dwStatusBarStyles |= CCS_TOP ;
  80.                break ;
  81.  
  82.           case IDM_STAT_BOTTOM :
  83.                dwStatusBarStyles &= 0xFFFFFFFC ;
  84.                dwStatusBarStyles |= CCS_BOTTOM ;
  85.                break ; 
  86.  
  87.           case IDM_STAT_NOMOVEY :
  88.                dwStatusBarStyles &= 0xFFFFFFFC ;
  89.                dwStatusBarStyles |= CCS_NOMOVEY ;
  90.                break ;
  91.  
  92.           case IDM_STAT_NOPARENTALIGN :
  93.                FlipStyleFlag (&dwStatusBarStyles, CCS_NOPARENTALIGN) ;
  94.                break ;
  95.  
  96.           case IDM_STAT_NORESIZE :
  97.                FlipStyleFlag (&dwStatusBarStyles, CCS_NORESIZE) ;
  98.                break ;
  99.           }
  100.  
  101.      hwndSB = InitStatusBar (hwndParent) ;
  102.  
  103.      // Post parent a WM_SIZE message to resize children
  104.      GetClientRect (hwndParent, &r) ;
  105.      PostMessage (hwndParent, WM_SIZE, 0, 
  106.                   MAKELPARAM (r.right, r.bottom)) ;
  107.  
  108.      return hwndSB ;
  109.      }
  110.  
  111.  
  112. //-------------------------------------------------------------------
  113. void StatusBarMessage (HWND hwndSB, WORD wMsg)
  114.      {
  115.      switch (wMsg)
  116.           {
  117.           case IDM_ST_GETBORDERS :
  118.                {
  119.                char ach[180] ;
  120.                int aiBorders[3] ;
  121.  
  122.                Status_GetBorders (hwndSB, &aiBorders) ;
  123.                wsprintf (ach, "Horiz Width = %d\n"
  124.                          "Vert Width = %d\n"
  125.                          "Separator Width = %d",
  126.                          aiBorders[0], aiBorders[1],
  127.                          aiBorders[2]) ;
  128.                MessageBox (GetParent (hwndSB), ach, 
  129.                            "SB_GETBORDERS", MB_OK) ;
  130.                break ;
  131.                }
  132.  
  133.           case IDM_ST_GETPARTS :
  134.                {
  135.                char ach[80] ;
  136.                int nParts = Status_GetParts (hwndSB, 0, 0) ;
  137.                wsprintf (ach, "Part Count = %d", nParts) ;
  138.                MessageBox (GetParent (hwndSB), ach, 
  139.                            "SB_GETPARTS", MB_OK) ;
  140.                break ;
  141.                }
  142.  
  143.           case IDM_ST_SETTEXT :
  144.                Status_SetText (hwndSB, 0, 0, 
  145.                                "SB_SETTEXT Message Sent") ;
  146.                break;
  147.  
  148.           case IDM_ST_SIMPLE :
  149.                {
  150.                static BOOL bSimple = TRUE ;
  151.                Status_Simple (hwndSB, bSimple) ;
  152.                bSimple = (!bSimple) ;
  153.                break ;
  154.                }
  155.           }
  156.      }
  157.  
  158. //-------------------------------------------------------------------
  159. LRESULT 
  160. Statusbar_MenuSelect (HWND hwnd, WPARAM wParam, LPARAM lParam)
  161.      {
  162.      UINT fuFlags = (UINT) HIWORD (wParam) ;
  163.      HMENU hMainMenu = NULL ;
  164.      int iMenu = 0 ;
  165.  
  166.      // Handle non-system popup menu descriptions.
  167.      if ((fuFlags & MF_POPUP) &&
  168.          (!(fuFlags & MF_SYSMENU)))
  169.           {
  170.           for (iMenu = 1 ; iMenu < MAX_MENUS ; iMenu++)
  171.                {
  172.                if ((HMENU) lParam == popstr[iMenu].hMenu)
  173.                     {
  174.                     hMainMenu = (HMENU) lParam ;
  175.                     break ;
  176.                     }
  177.                }
  178.           }
  179.  
  180.      // Display helpful text in status bar
  181.      MenuHelp (WM_MENUSELECT, wParam, lParam, hMainMenu, hInst, 
  182.                hwndStatusBar, (UINT *) &popstr[iMenu]) ;
  183.  
  184.      return 0 ;
  185.      }
  186.